package com.charging.business.vo.obj;


import com.alibaba.fastjson2.annotation.JSONField;

/**
 * 出口计费模块输出信息
 *
 * @author JerryLu
 * @date 2024/9/26 15:55
 */
public class FeeInfo {
    /**
     * 拟合应收金额, 单位：分
     * 必填：是
     */
    @JSONField(ordinal = 0)
    public Integer payFee = 0;

    /**
     * 拟合优惠金额, 单位：分
     * 必填：是
     */
    @JSONField(ordinal = 1)
    public Integer discountFee = 0;

    /**
     * 拟合实收金额, 单位：分
     * 必填：是
     */
    @JSONField(ordinal = 2)
    public Integer realFee = 0;

    /**
     * ETC最终卡面扣款金额（复合消费金额）, 单位：分
     * 必填：是
     */
    @JSONField(ordinal = 3)
    public Integer cardFee = 0;

    /**
     * 本省累计实收金额, 单位：分
     * 必填：是
     */
    @JSONField(ordinal = 4)
    public Integer feeProvSumLocal = 0;

    /**
     * 计费模块和计费参数版本号
     * 不超过40个字符。计费模块版本号与计费参数版本号使用“|”分隔<br>
     * 必填：是
     */
    @JSONField(ordinal = 5)
    public String rateVersion = "";

    /**
     * 计费特情组合
     * 多种特情时，以“|”分隔<br>
     * 必填：否
     */
    @JSONField(ordinal = 6)
    public String feeCalcSpecials = "";

    /**
     * 拟合结果
     * 必填：否
     * 0-未拟合或拟合成功
     * 1-拟合失败
     */
    @JSONField(ordinal = 7)
    public Integer pathFitFlag = 0;

    /**
     * 收费单元编号+处理标识
     * 必填：是
     */
    @JSONField(ordinal = 8)
    public String tollIntervalIDs = "";

    /**
     * 拟合应收金额组合
     * 必填：是
     */
    @JSONField(ordinal = 9)
    public String payFeeGroup = "";

    /**
     * 拟合优惠金额组合
     * 必填：是
     */
    @JSONField(ordinal = 10)
    public String discountFeeGroup = "";

    /**
     * 拟合实收金额组合
     * 必填：是
     */
    @JSONField(ordinal = 11)
    public String feeGroup = "";

    /**
     * 计费信息1
     * 必填：否
     */
    @JSONField(ordinal = 12)
    public String feeInfo1 = "";

    /**
     * 计费信息2
     * 必填：否
     */
    @JSONField(ordinal = 13)
    public String feeInfo2 = "";

    /**
     * 计费信息3
     * 必填：否
     */
    @JSONField(ordinal = 14)
    public String feeInfo3 = "";

    /**
     * 日志
     * 必填：否
     */
    @JSONField(ordinal = 15)
    public String feeLogMsg = "";

    /**
     * 计费里程
     * 必填：是
     */
    @JSONField(ordinal = 16)
    public Integer feeMileage = 0;

    /**
     * 计费模块实际使用的车型
     * 必填：是
     */
    @JSONField(ordinal = 17)
    public Integer feeVehicleType = 0;

    /**
     * 省内最小费额
     * 必填：是
     */
    @JSONField(ordinal = 18)
    public String provMinFee = "";

    /**
     * 本省省界入口ETC门架HEX码
     * 必填：否
     */
    @JSONField(ordinal = 19)
    public String feeProvBeginHexFit = "";

    /**
     * 本省省界入口ETC门架的通行时间
     * 必填：否
     */
    @JSONField(ordinal = 20)
    public String feeProvBeginTimeFit = "";

    /**
     * CPC卡是否进行全省路径拟合的标识
     * 必填：否
     * 0-未拟合,以下 gantryPassNumFit ，gantryPassHexFit， 2 个字段均视为无效
     * 大于 0 的值省内自行定义拟合方式
     */
    @JSONField(ordinal = 21)
    public Integer fitProvFlag = 0;

    /**
     * 过站信息中的门架数量
     * 必填：否
     */
    @JSONField(ordinal = 22)
    public Integer gantryPassNumFit = 0;

    /**
     * 拟合后的过站信息
     * 必填：否
     */
    @JSONField(ordinal = 23)
    public String gantryPassHexFit = "";

    /**
     * 本省累计应收金额
     * 必填：是
     */
    @JSONField(ordinal = 24)
    public Integer feeSpare1 = 0;

    /**
     * 本省累计计费里程
     * 必填：是
     */
    @JSONField(ordinal = 25)
    public Integer feeSpare2 = 0;

    /**
     * 保留字段
     * 必填：是
     */
    @JSONField(ordinal = 26)
    public String feeSpare3 = "";


    /**
     * 免费切换
     *
     * @since 20220501
     */
    @JSONField(serialize = false, deserialize = false)
    public void toFree() {
        realFee = 0;
        discountFee = payFee;
        cardFee = 0;
        feeProvSumLocal = 0;

        feeGroup = "";
        discountFeeGroup = "";
        String[] aryPayFee = payFeeGroup.split("\\|");
        for (String pay : aryPayFee) {
            if (feeGroup.length() > 0) {
                feeGroup += "|";
                discountFeeGroup += "|";
            }
            feeGroup += "0";
            discountFeeGroup += pay;
        }
    }

}
